<meta charset="utf-8">

<!-- <script>
    // 迭代器和可迭代对象学习

    // 生成器函数:
    //     1.function后面会跟上符号: *
    //         2.代码的执行可以被yield控制
    //     3.生成器函数默认在执行时, 返回一个生成器对象
    //         * 要想执行函数内部的代码, 需要生成器对象, 调用它的next操作
    //         * 当遇到yield时, 就会中断执行


    // 生成器函数
    function* fn() {
        console.log("aaa");
        console.log("bbb");
        yield
        console.log("ccc");
        console.log("ddd");
        yield
        console.log("eee");
        console.log("fff");
    }
    // 调用生成器函数，得到生成器对象
    // generator 是生成器的意思
    let generator = fn();
    // 生成器也有一个next方法
    generator.next()
    generator.next()
    generator.next()

</script> -->


<!-- <script>
    // 生成器函数
    // yield叫产出  产出数据
    function* fn() {
        console.log("aaa");
        console.log("bbb");
        yield "1"
        console.log("ccc");
        console.log("ddd");
        yield "2"
        console.log("eee");
        console.log("fff");
    }
    let generator = fn();
    // 第1次调用next就执行第1个yield之前的代码
    // 第2次调用next就执行第2个yield之前的代码
    // ... 
    console.log(generator.next()); // {value: '1', done: false}
    console.log(generator.next()); // {value: '2', done: false}
    console.log(generator.next()); // {value: undefined, done: false}
</script> -->


<!-- <script>
    // 生成器函数
    // yield叫产出  产出数据
    function* fn() {
        console.log("aaa");
        console.log("bbb");
        let num1 = yield "1"
        console.log("num1:",num1);
        console.log("ccc");
        console.log("ddd");
        let num2 = yield "2"
        console.log("num2:",num2);
        console.log("eee");
        console.log("fff");
    }
    let generator = fn();
    // 第1次调用next就执行第1个yield之前的代码
    // 第2次调用next就执行第2个yield之前的代码
    // ... 
    // 调用next时，可以给生成器函数传递参数   参数传递到yield前面
    console.log(generator.next('666')); // {value: '1', done: false}
    console.log(generator.next('888')); // {value: '2', done: false}
    console.log(generator.next('333')); // {value: undefined, done: false}
</script> -->


<!-- <script>
    function* fn() {
        let num1 = yield "1"
        console.log("num1:", num1);
        let num2 = yield "2"
        console.log("num2:", num2);
    }
    let generator = fn();
    // 第1次调用next方法，传递的参数，生成器函数是不能接收的
    // 第2次调用next方法，传递的参数，传递给了第1个yeild前面的变量
    // 第3次调用next方法，传递的参数，传递给了第2个yeild前面的变量
    console.log(generator.next('666')); // {value: '1', done: false}
    console.log(generator.next('888')); // {value: '2', done: false}
    console.log(generator.next('333')); // {value: undefined, done: false}
</script> -->


<!-- <script>
    function* foo(name1) {
        console.log("内部代码：111", name1);
        console.log("内部代码：222", name1);
        let name2 = yield "aaa"
        console.log("内部代码：333", name2);
        console.log("内部代码：444", name2);
        let name3 = yield "bbb"
        console.log("内部代码：555", name3);
        console.log("内部代码：666", name3);
        yield "ccc"
    }

    let generator = foo("malu")
    console.log(generator.next('666'));
    console.log(generator.next('888'));
    console.log(generator.next('333'));
</script> -->

<!-- <script>
    // 使用生成器 替代 之前讲的 迭代器
    let names = ["码路","漫漫","前端"];

    // 生成器函数
    function* createArrayGenerator(arr){

        for(let i=0; i<arr.length; i++){
            yield arr[i]
        }

        // yield arr[0]
        // yield arr[1]
        // yield arr[2]
    }
    // namesGen生成器对象
    let namesGen = createArrayGenerator(names)
    console.log(namesGen.next());
    console.log(namesGen.next());
    console.log(namesGen.next());
    console.log(namesGen.next());
</script> -->

<!-- <script>
    // 使用生成器 生成某个范围的值

    // 生成器函数
    function* createRangeGenerator(start, end) {

        for (let i = start; i <= end; i++) {
            yield i
        }

    }
    let rangeGen = createRangeGenerator(2, 5)
    console.log(rangeGen.next());
    console.log(rangeGen.next());
    console.log(rangeGen.next());
    console.log(rangeGen.next());
    console.log(rangeGen.next());
    console.log(rangeGen.next());
</script> -->


<script>
    let names = ["码路", "漫漫", "前端"];

    // 生成器函数
    function* createArrayGenerator(arr) {

        // yield语法糖
        yield* arr

        // for (let i = 0; i < arr.length; i++) {
        //     yield arr[i]
        // }

        // yield arr[0]
        // yield arr[1]
        // yield arr[2]
    }
    // namesGen生成器对象
    let namesGen = createArrayGenerator(names)
    console.log(namesGen.next());
    console.log(namesGen.next());
    console.log(namesGen.next());
    console.log(namesGen.next());
</script>